<?php

/**
 * Класс для обработки формы регистрации
 *
 * @author kingop
 */
class FormProcessor_UserRegistration extends FormProcessor {

    protected $db = null;               // объект для соединения с базой данных
    public $user = null;                // объект класса DatabaseObject_User
    protected $_validateOnly = false;   // флаг, указывающий тип запроса: true = ajax

    public function __construct($db) {
        parent::__construct();
        $this->db = $db;
        $this->user = new DatabaseObject_User($this->db);
        $this->user->type = 'member';
        $this->user->isApproved = 0;
        $this->user->isCreateProduct = 0;
        $this->user->content = '';
        $this->user->date_reg = date('Y-m-d H:i:s');
        $this->user->date_last = date('Y-m-d H:i:s');
    }

    public function validateOnly($flag) {
        $this->_validateOnly = (bool) $flag;
    }

    public function process(Zend_Controller_Request_Abstract $request) {
        // проверим логин
        $this->login = trim($request->getPost('login'));

        if (strlen($this->login) == 0)
            $this->addError('login', 'Вы должны указать логин');
        else if (!DatabaseObject_User::IsValidUsername($this->login))
            $this->addError('login', 'Логин содержит недопустимые символы');
        else if ($this->user->usernameExists($this->login))
            $this->addError('login', 'Выбранный вами логин уже занят');
        else
            $this->user->login = $this->login;

        // проверим пароль
        $this->password = trim($request->getPost('password'));

        if (strlen($this->password) == 0)
            $this->addError('password', 'Вы должны указать пароль');
        else {
            $this->password_again = trim($request->getPost('password_again'));
            if (strlen($this->password_again) == 0)
                $this->addError('password_again', 'Вы должны подтвердить пароль');
            else {
                if ($this->password != $this->password_again)
                    $this->addError('password_again', 'Пароли не совпадают');
                else {
                    $this->user->password = $this->password;
                    $this->user->_newPassword = $this->password;
                }
            }
        }

        // проверим Имя
        $this->first_name = trim($request->getPost('first_name'));
        if (strlen($this->first_name) == 0)
            $this->addError('first_name', 'Вы должны указать имя и фамилию, либо название магазина');
        else
            $this->user->first_name = $this->first_name;

        
        $this->phone = trim($request->getPost('phone'));
        if (strlen($this->phone) == 0)
            $this->addError('phone', 'Вы должны указать телефон');
        else
            $this->user->phone = $this->phone;
        
        // проверим область
        $this->country_id = trim($request->getPost('country_id'));
        if (strlen($this->country_id) == 0)
            $this->addError('country_id', 'Вы должны указать страну ');
        else
            $this->user->country_id = $this->country_id;
        
          // проверим город
        $this->region_id = trim($request->getPost('region_id'));
        if (strlen($this->region_id) == 0)
            $this->addError('region_id', 'Вы должны указать регион');
        else
            $this->user->region_id = $this->region_id;
        
         // проверим город
        $this->city_id = trim($request->getPost('city_id'));
        if (strlen($this->city_id) == 0)
            $this->addError('city_id', 'Вы должны указать город');
        else
            $this->user->city_id = $this->city_id;

        // проверим email
        $this->email = trim($request->getPost('email'));
        if (strlen($this->email) == 0)
            $this->addError('email', 'Вы должны указать email');
        else if ($this->user->emailExists($this->email)) {
            $this->addError('email', 'Указанный вами email уже занят');
        }
        else
            $this->user->email = $this->email;

        // $this->user->photo = trim($request->getPost('photo'));
        // проверим CAPTCHA
        $session = new Zend_Session_Namespace('captcha');
        $this->captcha = $this->sanitize($request->getPost('captcha'));

        $this->custom_phones = trim($request->getPost('custom_phones'));
        $this->user->custom_phones = $this->custom_phones;
        
        if ($this->captcha != $session->phrase)
            $this->addError('captcha', 'Вы ввели неверный код подтверждения');

        // если не было ошибок, сохраним пользователя
        if (!$this->_validateOnly && !$this->hasError()) {
            $this->user->save();
            unset($session->phrase);
        }

        return !$this->hasError();
    }

}

?>
